springcloud实战 | 您所在的位置:网站首页 › springcloud整合gateway引入nacos报Parameter 0 of method › springcloud实战 |
博主随记,供大家参考 目录 前言 一、下载seata-server? 二、下载nacos 三、创建mysql数据库表 四、修改seata-server-1.4.2配置文件 1.配置注册中心 2.配置-配置中心 五、添加seata-server的配置文件 1.天大的坑 六、微服务项目整合seata 1.在每个服务引入pom依赖(博主自行配置,供大家参考) 2.在yml文件中配置项目的配置文件 七、启动测试 总结 前言博主本人在参考了黑马的视频后,进行了springcloud整合seata1.4.2的实践,结果是频频报错,在参考与使用了官网的部署后还是出现了很多奇怪的报错,经过两天的部署终于部署完成,整理出了一份正确的部署方案和全方案的报错解决供大家参考。 一、下载seata-server?下载并解压seata1.4.2,seata下载地址:https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip 二、下载nacosnacos下载地址:Releases · alibaba/nacos · GitHub windows环境下,在nacos/bin目录下,进入dos输入命令startup.cmd -m standalone启动nacos 三、创建mysql数据库表新建数据库seata,然后选择seata数据库创建表 代码如下: CREATE TABLE IF NOT EXISTS `global_table` ( `xid` VARCHAR(128) NOT NULL, `transaction_id` BIGINT, `status` TINYINT NOT NULL, `application_id` VARCHAR(32), `transaction_service_group` VARCHAR(32), `transaction_name` VARCHAR(128), `timeout` INT, `begin_time` BIGINT, `application_data` VARCHAR(2000), `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMARY KEY (`xid`), KEY `idx_gmt_modified_status` (`gmt_modified`, `status`), KEY `idx_transaction_id` (`transaction_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; -- the table to store BranchSession data CREATE TABLE IF NOT EXISTS `branch_table` ( `branch_id` BIGINT NOT NULL, `xid` VARCHAR(128) NOT NULL, `transaction_id` BIGINT, `resource_group_id` VARCHAR(32), `resource_id` VARCHAR(256), `branch_type` VARCHAR(8), `status` TINYINT, `client_id` VARCHAR(64), `application_data` VARCHAR(2000), `gmt_create` DATETIME(6), `gmt_modified` DATETIME(6), PRIMARY KEY (`branch_id`), KEY `idx_xid` (`xid`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; -- the table to store lock data CREATE TABLE IF NOT EXISTS `lock_table` ( `row_key` VARCHAR(128) NOT NULL, `xid` VARCHAR(128), `transaction_id` BIGINT, `branch_id` BIGINT NOT NULL, `resource_id` VARCHAR(256), `table_name` VARCHAR(32), `pk` VARCHAR(36), `gmt_create` DATETIME, `gmt_modified` DATETIME, PRIMARY KEY (`row_key`), KEY `idx_branch_id` (`branch_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; CREATE TABLE IF NOT EXISTS `distributed_lock` ( `lock_key` CHAR(20) NOT NULL, `lock_value` VARCHAR(20) NOT NULL, `expire` BIGINT, primary key (`lock_key`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0); INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0); 四、修改seata-server-1.4.2配置文件 1.配置注册中心在seata-server-1.4.2/conf文件下修改registry.conf文件,加入注册中心配置: registry { type = "nacos" nacos { application = "seata-server" #注册在nacos的服务名 serverAddr = "127.0.0.1:8848" #nacos服务的地址端口 group = "SEATA_GROUP" #注册在nacos的分组 namespace = "" #指定在nacos的命名空间 cluster = "default" #集群 使用default username = "nacos" #nacos用户名 password = "nacos" #nacos密码 } } 2.配置-配置中心在seata-server-1.4.2/conf文件下修改registry.conf文件,加入配置中心配置: config { type = "nacos" nacos { serverAddr = "127.0.0.1:8848" #配置中心(nacos的地址) namespace = "" #配置中心的命名空间 group = "SEATA_GROUP" #配置中心的分组 username = "nacos" #nacos用户名 password = "nacos" #nacos密码 dataId = "seataServer.properties" #nacos的seata配置文件的dataId } } 大家可能像我一样迷惑,配置配置中心和注册中心的代码很相似,啥是注册中心?啥是配置中心呢?有啥不一样的? 注册中心就是将seata服务注册在nacos的服务列表,使用nacos管理更加的方便,而配置中心是我们将seata的配置配置在nacos的配置中心中,这样seata就可以直接在nacos中拉取配置,避免了seata集群需要配置整个集群每个服务的配置文件的问题,加快了部署效率。 五、添加seata-server的配置文件新建配置dataId为seataServer.properties、分组为SEATA_GROUP、配置格式为properties properties配置文件内容如下: # 数据存储方式,db代表数据库 store.mode=db store.db.datasource=druid store.db.dbType=mysql store.db.driverClassName=com.mysql.cj.jdbc.Driver store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=TRUE&serverTimezone=GMT%2B8 store.db.user=root store.db.password=123456 store.db.minConn=5 store.db.maxConn=30 store.db.globalTable=global_table store.db.branchTable=branch_table store.db.queryLimit=100 store.db.lockTable=lock_table store.db.maxWait=5000 # 事务、日志等配置 server.recovery.committingRetryPeriod=1000 server.recovery.asynCommittingRetryPeriod=1000 server.recovery.rollbackingRetryPeriod=1000 server.recovery.timeoutRetryPeriod=1000 server.maxCommitRetryTimeout=-1 server.maxRollbackRetryTimeout=-1 server.rollbackRetryTimeoutUnlockEnable=false server.undo.logSaveDays=7 server.undo.logDeletePeriod=86400000 # 客户端与服务端传输方式 transport.serialization=seata transport.compressor=none # 关闭metrics功能,提高性能 metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898 注意这里还有一个天大的坑!!!需要在nacos配置中心添加一个配置service.vgroupMapping.my_text_tx_group,分组为SEATA_GROUP内容为text格式的default 这可能是一个bug,浪费我两天的时间才解决,如果不配置这个在启动微服务的项目的时候会报错找不到服务:no available service found in cluster ‘XXXXX‘ 注意这个报错: Error creating bean with name 'globalTransactionScanner' defined in class path resource...... 这个报错应该是垃圾的回收机制导致的问题,在项目的配置中加入: --add-opens java.base/java.lang=ALL-UNNAMED 可以解决问题 六、微服务项目整合seata 1.在每个服务引入pom依赖(博主自行配置,供大家参考) com.alibaba.cloud spring-cloud-starter-alibaba-seata io.seata seata-spring-boot-starter io.seata seata-spring-boot-starter ${seata.version} com.alibaba.nacos nacos-client 1.4.2 2.在yml文件中配置项目的配置文件 seata: tx-service-group: my_test_tx_group #对应seataServer.properties中的service.vgroupMapping.my_test_tx_group 集群分组 registry: type: nacos #注册中心类型:nacos nacos: application: seata-server # seata-server注册在nacos中的服务名 server-addr: 127.0.0.1:8848 # nacos的地址端口 group : SEATA_GROUP # seata-server在nacos的分组 namespace: "" # seata-server在nacos的命名空间ID username: nacos # nacos账号 password: nacos # nacos密码 config: type: nacos nacos: server-addr: 127.0.0.1:8848 group: SEATA_GROUP namespace: "" # seata-server的配置文件的命名空间ID dataId: seataServer.properties # seata-server在nacos的配置dataId username: nacos password: nacos 七、启动测试启动nacos:startup.cmd -m standalone,后启动seata,观察nacos的服务列表和注册列表: seata启动成功为: 观察nacos的配置中心和注册中心: 之后启动微服务的项目观察seata的日志: 如图则为seata整合成功。 总结seata的整合确实比较费劲,因为这几天练习科目二导致两天才配置完成,因为各种的报错等等问题,总之希望对大家能有一定的帮助。 |
CopyRight 2018-2019 实验室设备网 版权所有 |